package demo03;

import java.util.HashMap;
import java.util.Hashtable;

/*
 *  java.util.Hashtable<K,V>集合 implements Map<K,V>接口
 * 
 *  Hashtable：底层是一个哈希表，是一个线程安全的集合，即单线程集合，速度慢
 *  HashMap：底层也是一个哈希表，是一个线程不安全的集合，即多线程集合，速度块
 * 
 *  Hashtable：不能存储null键和null值
 *  HashMap（以及之前学的所有集合）：可以存储null键和null值
 * 
 *  Hashtable和Vector集合一样，在jdk1.2版本之后被更先进的集合取代了
 *  Hashtable -> HashMap
 *  Vector -> ArrayList
 * 
 *  Hashtable的子类Properties集合没有被取代，仍然可以使用，是唯一和IO流相结合的集合
 */
public class Demo02HashTable {
    public static void main(String[] args) {
        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put(null, "a");
        hashMap.put("b", null);
        hashMap.put(null, null);
        System.out.println(hashMap); // {null=null, b=null}，HashMap可以正常存入空键和空值

        Hashtable<String, String> hashtable = new Hashtable<>();
        // hashtable.put(null, "a"); // NullPointerException空指针异常，Hashtable不允许存入空键
        // hashtable.put("a", null); // NullPointerException空指针异常，Hashtable不允许存入空值
        hashtable.put("a", "a");
        System.out.println(hashtable); // {a=a}，Hashtable可以正常存入非空键值对
    }
}